const fs = require("fs");
const path = require("path");
const { Document, Packer, Paragraph, TextRun } = require("docx");

// 递归查找指定目录下的所有 .ts 文件
function findTsFiles(dir) {
    let tsFiles = [];

    // 读取目录内容
    const items = fs.readdirSync(dir);

    items.forEach((item) => {
        const itemPath = path.join(dir, item);
        const stat = fs.statSync(itemPath);

        if (stat.isDirectory()) {
            // 如果是目录，递归查找
            tsFiles = tsFiles.concat(findTsFiles(itemPath));
        } else if (stat.isFile() && item.endsWith(".ts")) {
            // 如果是 .ts 文件，读取内容
            tsFiles.push({
                name: item,
                path: itemPath,
                content: fs.readFileSync(itemPath, "utf-8"),
            });
        }
    });

    return tsFiles;
}

// 将 .ts 文件内容写入 .docx 文件
async function createDocxFromTsFiles(tsFiles, outputFilePath) {
    const doc = new Document({
        sections: [], // 初始化 sections 数组
    });

    // 遍历每个 .ts 文件
    tsFiles.forEach((file) => {
        // 添加文件名作为标题
        doc.addSection({
            children: [
                new Paragraph({
                    children: [
                        new TextRun({
                            text: `File: ${file.name} (${file.path})`,
                            bold: true,
                            size: 24,
                        }),
                        new TextRun({
                            text: file.content,
                            size: 22,
                        }),
                    ],
                }),
            ],
        });
    });

    // 将文档保存为 .docx 文件
    const buffer = await Packer.toBuffer(doc);
    fs.writeFileSync(outputFilePath, buffer);
    console.log(`.docx 文件已生成: ${outputFilePath}`);
}

// 主函数
async function main() {
    const tsDir = "./ts-files"; // 存放 .ts 文件的目录
    const outputFilePath = "./output.docx"; // 输出的 .docx 文件路径

    // 递归查找 .ts 文件
    const tsFiles = findTsFiles(tsDir);
    if (tsFiles.length === 0) {
        console.log("未找到 .ts 文件");
        return;
    }

    // 创建 .docx 文件
    await createDocxFromTsFiles(tsFiles, outputFilePath);
}

// 运行主函数
main().catch((err) => console.error("发生错误:", err));